package san.java.day08;

/**
 * 单例设计模式: 即在整个软件系统运行过程中,这个类只被实例化一次,以后不论在哪都只调用这一个实例
 *  什么时候使用单例?
 *      1. 实例化过程需要耗费大量时间
 *      2. 频繁的 new 新对象没有必要,一个对象就够用了
 *
 *  单例模式只会 new 一次
 *
 *  单例的类型:
 *      1. 饿汉式: 一开始就new好了
 *      2. 懒汉式: 最开始,对象是null,直到有第一个人调用,才new
 */

class EHan {

    /**
     * 饿汉式单例:
     */


    /**
     * 私有构造函数
     */
    private EHan() {

    }

    private static EHan eHan = new EHan();

    public static EHan getInstance() {
        return eHan;
    }

}

class LHan {
    /**
     * 懒汉式单例:
     */

    /**
     * 私有构造方法
     */
    private LHan() {

    }

    private static LHan lHan = null;

    public static LHan getInstance() {
        if (lHan == null) {
            lHan = new LHan();
        }

        return lHan;
    }
}

public class Singleton_05 {

    public static void main(String[] args) {
        EHan eHan = EHan.getInstance();
        EHan eHan1 = EHan.getInstance();
        System.out.println(eHan == eHan1);
    }
}
